// 数字

// 十进制
123;
321;

// 二进制
0b100101010101;

// 八进制
0o2141237123000123125126;

// 十六进制
0xABCDEF;

// 指数形式（科学计数法）
0.1e+5;
0.2e-5;

Number.MIN_VALUE; // 数字最小值
Number.MAX_VALUE; // 数字最大值

// min 最小
// max 最大

Number.MIN_SAFE_INTEGER; // 最小安全整数
Number.MAX_SAFE_INTEGER; // 最大安全整数
// ID生成器
// 表的索引（0-最大整数）
// 表-分裂：分表

Number.NaN; // 非数字

Number.NEGATIVE_INFINITY; // 负无穷
Number.POSITIVE_INFINITY; // 正无穷

Number.parseInt('123');
// ->
parseInt('123'); // 等价 字符串转整数
Number.parseFloat('12.3');
// ->
parseFloat('12.3'); // 等价 字符串转小数
Number.isNaN(+'b');
// ->
isNaN(+'c'); // 等价 判断是否为非数字
Number.isFinite(1 / 0);
// ->
isFinite(1 / 0); // 等价 判断是否是有限数字

Number.isInteger(1.2); // 判断是否为整数
Number.isSafeInteger(3444); // 判断是否为安全整数

const num = 123456789;
num.toExponential(); // 1.23456789e+8 返回【原始】的科学记数法字符串
num.toPrecision(3); // 1.23e+8 返回【指定位数】的科学记数法字符串
const num2 = 3.1415926535;
num2.toFixed(2); // 3.14 保留指定位数的小数

/**
 * Math.abs(-10); // 10
 * 场景：在游戏开发中计算两个物体之间的距离时，我们只关心它们相距多远而不关心方向。这时可以使用Math.abs()来确保距离总是正值。
 *
 * Math.pow(2, 10); // 2 的 10 次方
 * 场景：在计算机科学中，经常需要计算以2为底的幂（比如位运算或者计算存储容量）。例如，计算1KB等于多少字节可以用Math.pow(2, 10)来得出结果1024。
 *
 * Math.floor(3.5); // 3
 * 场景：在一个电子商务网站上，如果要对商品价格进行舍入处理，并且总是向下取整到最接近的整数金额，可以使用Math.floor()函数。
 *
 * Math.ceil(3.5); // 4
 * 场景：假设你正在实现分页功能，而总共有7个物品每页显示3个。为了计算总共需要多少页，你会用7除以3得到约2.333，然后使用Math.ceil()将其向上取整为3，表示需要3页来展示所有物品。
 *
 * Math.min(1, 2, 3, 4, 5, 6, 0); // 0
 * 场景：如果你有一个温度监控系统，它接收来自多个传感器的数据并想要找到当前最低温度，那么Math.min()可以帮助快速找出最小值。
 *
 * Math.max(1, 200, 3, 4, 6, 10, 20); // 200
 * 场景：类似地，在上述温度监控系统中，如果要找到最高温度，则可以使用Math.max()。
 *
 * Math.random(); // 返回 0 和 1 之间的随机数
 * 场景：用于生成随机验证码或抽奖活动中选择幸运儿。通过Math.random()结合其他逻辑可以创建一个公平的随机选择机制。
 *
 * Math.round(3.5); // 四舍五入
 * 场景：当从用户那里接收到输入并且希望根据标准四舍五入规则处理小数时，Math.round()非常有用。例如，在财务计算中可能需要对货币数值进行四舍五入。
 *
 * Math.fround(3.5); // 返回最接近于该浮点数的数字
 * 场景：在图形渲染或音频处理等需要高精度浮点运算的场合下，有时会遇到超出JavaScript浮点数精度范围的问题。Math.fround()可以用来获取单精度浮点数表示，这对于优化性能或者与硬件交互特别有用。
 */

// 作业1：上面这些每一个都举3个例子

// new Date(时间戳); 1733814418030 微秒时间戳 从1970年1月1日0点开始到现在此刻为止的微妙总和
// new Date(日期字符串); 2014-10-12T00:00:00 日期字符串，可以指定任意时间
    // new Date(1995, 11, 25, 9, 30, 0); new Date(年, 月, 日) 或  new Date(年, 月, 日, 时, 分, 秒)
// new Date(其他Date对象); 会【复刻、复制】其他Date对象的：年月日时分秒微妙
// new Date(); 获取此刻的时间（一般用于记录下单时间、创建时间等待）
const date = new Date();
date.setFullYear(2014); // 设置年份
date.getFullYear(); // 2014 获取年份

date.setMonth(12 - 1); // 设置月份，正常月份-1（范围是0-11，逢12进1）
date.getMonth(); // 11 获取月份，实际是12月（结果+1）

date.setDate(10); // 设置日期
date.getDate(); // 10 获取日期

date.setHours(15); // 设置小时（24进1）
date.getHours(); // 15 获取小时

date.setMinutes(25); // 设置分钟（60进1）
date.getMinutes(); // 25 获取分钟

date.setSeconds(59); // 设置秒（60进1）
date.getSeconds(); // 59 获取秒

date.getTime(); // 获取当前时间的时间戳
Date.now(); // 获取当前时间的时间戳

date.toLocaleString() // '2024/12/11 17:25:46'
date.toLocaleTimeString() // '17:25:46'
date.toLocaleDateString() // '2024/12/11'

// 千万别：书到用时方恨少
// 读书破万卷，下笔如有神 （AI-物理模型）

/**
 * token
 * 读-书
 *   -信
 *   -卡
 */


// 作业2：用上面4种方式分别创建3个时间

function JSClock() {
    // 声明了time变量赋予给它一个时间的对象
    // 创建了一个时间对象，并赋值给了time变量
    var time = new Date();
    // 调用时间对象的 getHours() 函数，获取time的小时，并赋值给 hour 变量
    var hour = time.getHours();
    // 调用时间的对象 getHours() 函数, 获取time的分钟，并赋值给 minute 变量
    var minute = time.getMinutes();
    //调用时间对象的 getSeconds() 函数,获取time的秒，并赋值给second 变量
    var second = time.getSeconds();
    // console.log(输出);
    //如果变量hour 大于十二hour-12 反之 hour不变 加上"" ,并赋值给temp变量
    var temp = "" + (hour > 12 ? hour - 12 : hour);
    //如果 hour 等于零 temp就赋值 "12"
    if (hour == 0) temp = "12";
    // 1. 如果 minute 小于 10，则用 ':0' 加上 minute 的值
    // 2. 如果 minute 大于等于 10，则用 ':' 加上 minute 的值
    // 3. 并且将最终结果，追加至 temp
    temp += (minute < 10 ? ":0" : ":") + minute;
    // 如果second小于10 则用":0"加上second的值
    // 大于等于10，则用":"加上second的值
    // 并且将最终结果，追加至temp
    temp += (second < 10 ? ":0" : ":") + second;
    temp += hour >= 12 ? " P.M." : " A.M.";
    return temp;
}

// 作业3：理解解释上面这个函数